CloudFormatonのドリフト検出の精度はコードで決まる
こんにちは、AWS 事業本部コンサルティング部のたかくに(@takakuni_)です。
今回は CloudFormation の「ドリフト検出」の仕様についてご紹介したいと思います。
結論
- ドリフト検出は、「スタックで記載しているプロパティ」と「実際のリソースの設定値」の差異を検出する機能
- ドリフトで検出させたい設定値はデフォルトと同一でも明示的に指定が必要
ドリフト検出とは
スタックによって作成されたリソースの変更点を検知する機能になります。
参考
- CloudFormation スタック全体のドリフトを検出
- 新 – CloudFormation ドリフト検出
- AWS CloudFormation で手動で行った変更が検出可能になりました!!!
- ドリフトを検出する際の考慮事項
実践
事前準備
今回は以下のようなコードを準備しました。EC2 インスタンスを作成するコードになります。
ImageId
、InstanceType
に加え、DisableApiTermination
をドリフト検出する対象として追加しました。
AWSTemplateFormatVersion: '2010-09-09'
Resources:
EC2Instance:
Type: AWS::EC2::Instance
Properties:
ImageId: 'ami-0218d08a1f9dac831' # Amazon Linux2 (ap-northeast-1)
InstanceType: 't2.micro'
DisableApiTermination: 'false'
コード記述範囲内の変更
DisableApiTermination
を手動で変更してみましょう。
ドリフト検出を行うと以下のように差分が検出されました。
コード記述範囲外の変更
ここからが本題です。
コードで記述されていないタグを追加してみます。
再度、ドリフト検出を行いましたが手動変更した部分はコードに記述されていないため検出されていません。
つまり、ドリフト検出の対象はコードで記載したプロパティとなります。
まとめ
冒頭でも取り上げましたが、大事なことなのでもう一回取り上げます。
- ドリフト検出は、「スタックで記載しているプロパティ」と「実際のリソースの設定値」の差異を検出する機能
- ドリフトで検出させたい設定値はデフォルトと同一でも明示的に指定が必要
コードでリソースの変更管理を行いたいお客様となれば、「ドリフト検出」は欠かせない要素となります。
しかし、上記のような落とし穴があるので「どの設定値」を変更管理するかヒヤリングするとスムーズに開発が進むかと思います。
この記事が少しでもお役に立てば幸いです。
以上、AWS 事業本部コンサルティング部のたかくに(@takakuni_)でした!